package com.alvinalexander.testproject

import java.io.File
import java.net.URL
import java.util.concurrent.TimeUnit

import org.ehcache.config.{CacheConfiguration, Configuration}
import org.ehcache.{Cache, CacheManager, PersistentCacheManager}
import org.ehcache.config.builders.{CacheConfigurationBuilder, CacheManagerBuilder, ResourcePoolsBuilder}
import org.ehcache.config.units.{EntryUnit, MemoryUnit}
import org.ehcache.expiry.{Duration, Expirations}
import org.ehcache.xml.XmlConfiguration

object Hello extends App {
	
	//普通示例
	
	val cacheManager: CacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache( //（1）
		"preConfigured",
		CacheConfigurationBuilder.newCacheConfigurationBuilder(
			classOf[java.lang.Long],
			classOf[java.lang.String],
			ResourcePoolsBuilder.heap(10)
		) //（2）
	).build() //（3）
	
	cacheManager.init() //（4）
	
	val preConfigured: Cache[java.lang.Long, java.lang.String] = cacheManager.getCache("preConfigured", classOf[java.lang.Long], classOf[java.lang.String]) //（5）
	
	val myCache: Cache[java.lang.Long, java.lang.String] = cacheManager.createCache("myCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(classOf[java.lang.Long], classOf[java.lang.String], ResourcePoolsBuilder.heap(10)).build()) //（6）
	
	myCache.put(1L, "da one!") //（7）
	val value: java.lang.String = myCache.get(1L) //（8）
	println(value)
	
	cacheManager.removeCache("preConfigured") //（9）
	
//	cacheManager.close() //（10）
//
//	//堆外
//
//	val cacheManager2:CacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache(
//		"tieredCache",
//		CacheConfigurationBuilder.newCacheConfigurationBuilder(
//			classOf[java.lang.Long],
//			classOf[java.lang.String],
//			ResourcePoolsBuilder.newResourcePoolsBuilder()
//				.heap(10, EntryUnit.ENTRIES)
//				.offheap(10, MemoryUnit.MB) //（1）
//		)
//	)
//	.build(true)
//
//	val tieredCache:Cache[java.lang.Long, java.lang.String] = cacheManager2.getCache("tieredCache",classOf[java.lang.Long], classOf[java.lang.String])
//
//	cacheManager2.close()
//
	//配置生存时间到期
	val cacheConfiguration:CacheConfiguration [java.lang.Long, java.lang.String]  = CacheConfigurationBuilder.newCacheConfigurationBuilder(
		classOf[java.lang.Long],
		classOf[java.lang.String],
		ResourcePoolsBuilder.heap(100) //（1）
	).withExpiry(
		Expirations.timeToLiveExpiration(Duration.of(
			1,
			TimeUnit.SECONDS)//（2）
		)
	).build()
	
	val timeOutCache: Cache[java.lang.Long, java.lang.String] = cacheManager.createCache("timeOutCache", cacheConfiguration) //（6）
	timeOutCache.put(1L,"没有超时显示，超时直接移除，输出null")
	
	println (timeOutCache.get(1L))

	Thread.sleep(2000L)
	
	println (timeOutCache.get(1L))
	
	cacheManager.close() //（10）
	
//
//	//xml配置
//	val myUrl:URL  = this.getClass().getResource("/my-config.xml")
//	val xmlConfig:Configuration = new XmlConfiguration(myUrl)
//	val myCacheManager:CacheManager = CacheManagerBuilder.newCacheManager(xmlConfig)
//
	
}